// 给定两个字符串形式的非负整数num1和num2，计算它们的和
// 要求： num1和num2的长度都小于5100
// num1和num2都只包含数字0-9
// num1和num2都不包含任何前导0
// 不能使用内建的BigInteger库，也不能直接将输入的字符串转换为整数形式

// 思路，需要从低位遍历字符串，需要一个变量carry记录进位
// 时间复杂度：O(max(n, m))
// 空间复杂度：O(max(n, m))

function addStrings(str1, str2) {
    let carry = 0
    let index1 = str1.length - 1
    let index2 = str2.length - 1
    let res = ''
    while (index1 >= 0 || index2 >= 0 || carry) {
        let va1 = str1[index1] ? Number(str1[index1]) : 0
        let va2 = str2[index2] ? Number(str2[index2]) : 0
        let sum = va1 + va2 + carry
        carry = Math.floor(sum / 10)
        res = (sum % 10) + res
        index1--
        index2--
    }
    return res
}

let num1 = "11", num2 = "123"
console.log(addString(num1, num2));